package request

import "time"

// PermissionCreateRequest 创建权限请求
type PermissionCreateRequest struct {
	Name        string     `json:"name" binding:"required"`    // 权限名称
	Code        string     `json:"code" binding:"required"`    // 权限编码
	Description string     `json:"description"`                // 权限描述
	Type        int        `json:"type" binding:"required"`    // 权限类型：1-菜单，2-按钮，3-接口，4-动态权限
	ParentID    *uint      `json:"parent_id"`                  // 父权限ID
	Path        string     `json:"path"`                       // API路径
	Method      string     `json:"method"`                     // HTTP方法
	Action      string     `json:"action"`                     // 动作标识
	Component   string     `json:"component"`                  // 前端组件路径
	Icon        string     `json:"icon"`                       // 图标
	Sort        int        `json:"sort"`                       // 排序
	IsVisible   bool       `json:"is_visible"`                 // 是否可见
	ValidFrom   *time.Time `json:"valid_from"`                 // 生效时间
	ValidTo     *time.Time `json:"valid_to"`                   // 失效时间
	Conditions  string     `json:"conditions"`                 // 权限条件（JSON格式）
	Status      int        `json:"status" binding:"oneof=0 1"` // 状态：0-禁用，1-启用
}

// PermissionUpdateRequest 更新权限请求
type PermissionUpdateRequest struct {
	ID          uint       `json:"id" binding:"required"`      // 权限ID
	Name        string     `json:"name" binding:"required"`    // 权限名称
	Code        string     `json:"code" binding:"required"`    // 权限编码
	Description string     `json:"description"`                // 权限描述
	Type        int        `json:"type" binding:"required"`    // 权限类型：1-菜单，2-按钮，3-接口，4-动态权限
	ParentID    *uint      `json:"parent_id"`                  // 父权限ID
	Path        string     `json:"path"`                       // API路径
	Method      string     `json:"method"`                     // HTTP方法
	Action      string     `json:"action"`                     // 动作标识
	Component   string     `json:"component"`                  // 前端组件路径
	Icon        string     `json:"icon"`                       // 图标
	Sort        int        `json:"sort"`                       // 排序
	IsVisible   bool       `json:"is_visible"`                 // 是否可见
	ValidFrom   *time.Time `json:"valid_from"`                 // 生效时间
	ValidTo     *time.Time `json:"valid_to"`                   // 失效时间
	Conditions  string     `json:"conditions"`                 // 权限条件（JSON格式）
	Status      int        `json:"status" binding:"oneof=0 1"` // 状态：0-禁用，1-启用
}

// PermissionListRequest 权限列表请求
type PermissionListRequest struct {
	Keyword string `json:"keyword"` // 关键字
	Type    int    `json:"type"`    // 权限类型：1-菜单，2-按钮，3-接口，4-动态权限
	Status  *int   `json:"status"`  // 状态：0-禁用，1-启用
}

// RolePermissionAssignRequest 角色权限分配请求
type RolePermissionAssignRequest struct {
	RoleID        uint   `json:"role_id" binding:"required"`        // 角色ID
	PermissionIDs []uint `json:"permission_ids" binding:"required"` // 权限ID列表
}

// DynamicPermissionAssignRequest 动态权限分配请求
type DynamicPermissionAssignRequest struct {
	RoleID       uint       `json:"role_id" binding:"required"`       // 角色ID
	PermissionID uint       `json:"permission_id" binding:"required"` // 权限ID
	ValidFrom    *time.Time `json:"valid_from"`                       // 生效时间
	ValidTo      *time.Time `json:"valid_to"`                         // 失效时间
	Conditions   string     `json:"conditions"`                       // 权限条件（JSON格式）
	Remark       string     `json:"remark"`                           // 备注
}
